

#ifndef DLX_H_
#define DLX_H_

#pragma pack(push, 1)  /* 按1字节对齐（取消填充）*/

/* DLX RECEIVE */
// typedef struct {
//   uint16_t head;              //0x2803
//   float    rcwSpd[4];                         
//   float    mtCur[4];                        
//   uint8_t  rev1U8;
//   float    rev2F32[2];
//   uint8_t  rev4U8;
//   float    rev5F32[2];
//   uint16_t dtFLag;             // 电推开关 1开 0关
//   uint8_t  rev7U8;
//   uint16_t rev8U16;
//   uint8_t  rev9U8;
//   uint16_t rev10U16;
//   uint8_t  rev11U8;
//   uint16_t rev120U16;
//   uint8_t  rev13U8;
//   uint16_t rev14U16;
// } Dyn_Receive;
// 

/* DLX RECEIVE */
typedef struct {
  uint16_t head;               //0x2803
  float    rcwSpd[4];                         
  float    mtCur[3];                        
  double   pos[3];             // J2000 位置
  float    spd[3];             //  速度
  uint16_t dtFLag;             // 电推开关 1开 0关
  uint16_t rev120U16;
} Dyn_Receive;


/* DLX SEND */
typedef struct {
  uint16_t  head;                //0x1803
  //uint8_t  navSts;             //0x55:valid ; 0x00 invalid
  double    pos[3];              // J2000 位置
  float     spd[3];              //  速度
  uint32_t  second;              // 1s/bit  UTC 2006 年 1月 1日 0:0:0
  uint32_t  usec;                // 1us/bit
  float     assA[4];             // 2.44ms/bit
  float     assB[4];
  float     mtX;
  float     mtY;
  uint32_t  stAExpTimeSec;
  uint16_t  stAExpTimeMsec;
  float     stAQu[4];            // y=x / 2147483647 (0x7FFFFFFF)
  //uint8_t   stAFlag;           // 高位 bit7~bit6  :0x10 数据无效;  0x01:数据有效
  //uint8_t   stASts;            // 0:invalid 1:valid
  uint32_t  stBExpTimeSec; 
  uint16_t  stBExpTimeMsec; 
  float     stBQu[4];            // y=x / 2147483647 (0x7FFFFFFF)
  //uint8_t   stBFlag;           // 高位 bit7~bit6  :0x10 数据无效;  0x01:数据有效
  //uint8_t   stBSts;            // 0:invalid 1:valid
  float     mtZ; 
  uint16_t  rev2U16; 
  float     DeltaDeltaQu[3];     // y=x / 2147483647 (0x7FFFFFFF)
  //uint8_t   stRevCFlag;        // 高位 bit7~bit6  :0x10 数据无效;  0x01:数据有效
  //uint8_t   stRevCSts;         // 0:invalid 1:valid
  float     fogGyroSpd[3];       // 光纤
  float     mmGyroSpd[3];        // 微机械
  float     mm[3];               // 磁强计
  float     rcwSpd[4];           // 飞轮
  //float     rev3[2];
} Dyn_Send;

#pragma pack(pop)  /* 恢复默认对齐  */ 

/* 动力学发送缓冲区 */ 
union Dyn_buffer{
    uint8_t      cmd[200];
    Dyn_Send     dynSendBuff;
    Dyn_Receive  dynReceBuff;
};

#endif /*DLX_H_*/
